package com.example.community.dao;

import com.example.community.entity.DiscussPost;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: huang
 * @Date: 2021/9/13 18:19
 * @Description:
 */
@Mapper
public interface DiscussPostMapper {

    /**
     *
     * @param userId
     * @param offset    页码
     * @param limit     每一页最多显示的数据
     * @return 首页分页查询,查到的是多条数据，返回的是List集合
     *     userId 是为了以后查找个人主页的帖子，当userId为0时，表示首页查询，如果不是0代表着查找用户主页的帖子
     *     在mapper层拼接sql语句时，动态的选择拼接userId
     */
    List<DiscussPost> selectDiscussPosts(@Param("userId") int userId,
                                         @Param("offset") int offset,@Param("limit") int limit, @Param("orderMode") int orderMode);

    /**
     *
     * @param userId
     * @return            查询表里一共有多少条数据，同样也是动态拼接userId
     *                  不拼接userId时，查询的是首页全部数据条数
     *                  拼接userId，查询的是该用户的数据条数
     *                  @Param : 当我们动态绑定的时候在<if>里使用，如果只有一个参数，必须起别名
     */
    int selectDiscussPostRows(@Param("userId") int userId);

    int insertDiscussPost(DiscussPost discussPost);

    //查询帖子详情
    DiscussPost selectDiscussPostById(int id);

    //更新帖子的评论数量,id是帖子id
    int updateCommentCount(@Param("id")int id,@Param("commentCount") int commentCount);

    /**
     * 置顶操作：即把帖子的 type 字段改为 1
     */
    int updateType(@Param("id") int id,@Param("type") int type);

    /**
     *      加精操作：即把帖子的 status 字段改为 1
     *      删除操作：即把帖子的 status 字段改为 2
     */
    int updateStatus(@Param("id") int id,@Param("status") int status);

    /**
     * 更新帖子分数
     */
    int updateScore(@Param("id") int id,@Param("score") double score);

}
